// Copyright (c) 2025 Ilya Fedorov
// SPDX-License-Identifier: MIT
// https://github.com/iljyxa/SharedQueryDesignerHRM

#Область ОписаниеПеременных

&НаСервере
Перем ОбработкаОбъект; // ВнешняяОбработка.КонструкторПредставленийЗарплатаКадры

#КонецОбласти

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	ТекстЗапросаПредставления.УстановитьТекст(Параметры.ТекстЗапросаПредставления);	
	ОбновитьИсполняемыйТекстЗапроса = Истина;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура СтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)
	
	Если ТекущаяСтраница = Элементы.СтраницаТекстЗапросаИсполняемый
		И ОбновитьИсполняемыйТекстЗапроса Тогда
		
		ТекстЗапроса = ТекстЗапросаПредставления.ПолучитьТекст();
		Если СтрНайти(ТекстЗапроса, "|") > 0 Тогда
			ТекстЗапроса = ТекстЗапросаИзСтрокКода(ТекстЗапроса);	
		КонецЕсли;
		
		Попытка
			ТекстЗапросаИсполняемый.УстановитьТекст(ИсполняемыйТекстЗапросаПредставления(ТекстЗапроса));
		Исключение
			ТекстЗапросаИсполняемый.УстановитьТекст(
				НСтр("ru = 'Произошла ошибка при формировании текста запроса. Возможно, в представлении допущена ошибка:'")
				+ Символы.ПС
				// + УИ
				//+ ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
				+ ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
				// - УИ
						
		КонецПопытки;
		
		ОбновитьИсполняемыйТекстЗапроса = Ложь;	
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ТекстЗапросаПредставленияПриИзменении(Элемент)
	ОбновитьИсполняемыйТекстЗапроса = Истина;
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
// + УИ
//Асинх Процедура СкопироватьВБуферОбмена(Команда)
Процедура СкопироватьВБуферОбмена(Команда)
// - УИ
	Если Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаТекстЗапросаИсполняемый Тогда
		ДанныеДляПомещенияВБуфер = ТекстЗапросаИсполняемый.ПолучитьТекст();
	Иначе
		ДанныеДляПомещенияВБуфер = ТекстЗапросаПредставления.ПолучитьТекст();	
	КонецЕсли;
	
	// + УИ
	//ЭлементБуфераОбмена = Новый ЭлементБуфераОбмена(СтандартныйФорматДанныхБуфераОбмена.Текст, ДанныеДляПомещенияВБуфер);
	//Ждать СредстваБуфераОбмена.ПоместитьДанныеАсинх(ЭлементБуфераОбмена);
	УИ_БуферОбменаКлиент.НачатьКопированиеСтрокиВБуфер(ДанныеДляПомещенияВБуфер, Неопределено);
	// - УИ
КонецПроцедуры

&НаКлиенте
Процедура ПреобразоватьДляВставкиВКод(Команда)
	
	Если Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаТекстЗапросаИсполняемый Тогда
		ТекстовыйДокумент = ТекстЗапросаИсполняемый;
	Иначе
		ТекстовыйДокумент = ТекстЗапросаПредставления;	
	КонецЕсли;
	
	ТекстЗапроса = ТекстовыйДокумент.ПолучитьТекст();
	
	Если СтрНайти(ТекстЗапроса, "|") > 0 Тогда
		ТекстЗапроса = ТекстЗапросаИзСтрокКода(ТекстЗапроса);	
	Иначе
		ТекстЗапроса = ТекстЗапросаДляВставкиВКод(ТекстЗапроса);
	КонецЕсли;
	
	ТекстовыйДокумент.УстановитьТекст(ТекстЗапроса);
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Функция ИсполняемыйТекстЗапросаПредставления(Знач ТекстЗапросаПредставления)
	
	Если ПустаяСтрока(ТекстЗапросаПредставления) Тогда
		Возврат "";
	КонецЕсли;
	
	ОбработкаОбъект = ОбработкаОбъект();
	МодульОбщегоНазначения = ОбработкаОбъект.МодульОбщегоНазначения();
	МодульЗарплатаКадрыОбщиеНаборыДанных = МодульОбщегоНазначения.ОбщийМодуль("ЗарплатаКадрыОбщиеНаборыДанных");
	МодульЗарплатаКадрыОбщиеНаборыДанных.ЗаменитьЗапросыКПредставлениямВиртуальныхТаблиц(ТекстЗапросаПредставления);
	
	Возврат ТекстЗапросаПредставления;
		
КонецФункции

&НаСервереБезКонтекста
Функция ТекстЗапросаДляВставкиВКод(Знач ТекстЗапроса)
	
	ТекстЗапроса = СокрЛП(ТекстЗапроса);
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, """", """""");
	ТекстЗапроса = """" + ТекстЗапроса + """";
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, Символы.ПС, Символы.ПС + "|");
	Возврат ТекстЗапроса;
	
КонецФункции

&НаСервере
Функция ТекстЗапросаИзСтрокКода(Знач ТекстЗапроса)
	
	Возврат ОбработкаОбъект().ТекстЗапросаИзСтрокКода(ТекстЗапроса);
	
КонецФункции

// Объект текущей обработки
// 
// Возвращаемое значение:
//  ОбработкаОбъект.УИ_КонструкторПредставленийЗарплатаКадры - Обработка объект
//
&НаСервере
Функция ОбработкаОбъект()
	
	Если ОбработкаОбъект = Неопределено Тогда
		ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
	КонецЕсли;
	
	Возврат ОбработкаОбъект;
	
КонецФункции

#КонецОбласти
